package com.bl.andr.utillib;

import android.text.TextUtils;

/**
 * v
 */
public class ValueOf {

    public static String toString(Object o) {
        String value = "";
        try {
            value = o.toString();
        } catch (Exception e) {
        }

        return value;
    }

///////////////////////////////////////////////////////////////////////////
//  Double
///////////////////////////////////////////////////////////////////////////

    public static double toDouble(Object o) {
        return toDouble(o, 0);
    }

    public static double toDouble(Object o, double defaultValue) {
        if (o == null) {
            return defaultValue;
        }
        double value;
        try {
            value = Double.valueOf(o.toString().trim());
        } catch (NumberFormatException e) {
            value = defaultValue;
        }

        return value;
    }


///////////////////////////////////////////////////////////////////////////
// Long
///////////////////////////////////////////////////////////////////////////

    public static long toLong(Object o) {
        return toLong(o, 0);
    }

    public static long toLong(Object o, long defaultValue) {
        if (o == null) {
            return defaultValue;
        }
        long value = 0;
        try {
            String s = o.toString().trim();
            if (s.contains(".")) {
                value = Long.valueOf(s.substring(0, s.lastIndexOf(".")));
            } else {
                value = Long.valueOf(s);
            }
        } catch (NumberFormatException e) {
            value = defaultValue;
        }


        return value;
    }


///////////////////////////////////////////////////////////////////////////
// Float
///////////////////////////////////////////////////////////////////////////

//    /**
//     * 将对象转化为long，如果不符合要求返回默认值,防止value为""或者null
//     */
//    public static long convert2Long(Object value, long defaultValue) {
//        if (value == null || "".equals(value.toString().trim())) {
//            return defaultValue;
//        }
//        try {
//            return Long.valueOf(value.toString());
//        } catch (NumberFormatException e) {
//            try {
//                return Double.valueOf(value.toString()).longValue();
//            } catch (NumberFormatException e1) {
//                return defaultValue;
//            }
//        }
//    }


    public static float toFloat(Object o) {
        return toFloat(o, 0);
    }

    public static float toFloat(Object o, long defaultValue) {
        if (o == null) {
            return defaultValue;
        }
        float value = 0;
        try {
            String s = o.toString().trim();
            value = Float.valueOf(s);
        } catch (NumberFormatException e) {
            value = defaultValue;
        }


        return value;
    }


///////////////////////////////////////////////////////////////////////////
// Int
///////////////////////////////////////////////////////////////////////////


    public static int toInt(Object o) {
        return toInt(o, 0);
    }


    public static int toInt(Object o, int defaultValue) {
        if (o == null) {
            return defaultValue;
        }
        int value;
        try {
            String s = o.toString().trim();
            if (s.contains(".")) {
                value = Integer.valueOf(s.substring(0, s.lastIndexOf(".")));
            } else {
                value = Integer.valueOf(s);
            }
        } catch (NumberFormatException e) {
            value = defaultValue;
        }

        return value;
    }


///////////////////////////////////////////////////////////////////////////
// Boolean
///////////////////////////////////////////////////////////////////////////


    public static boolean toBoolean(Object o) {
        return toBoolean(o, false);
    }


    public static boolean toBoolean(String o) {
        return toBoolean(o, false);

    }

    public static boolean toBoolean(int o) {
        return toBoolean(o, false);

    }

    public static boolean toBoolean(Object o, boolean defaultValue) {
        if (o == null) {
            return false;
        }
        boolean value;
        try {
            String s = o.toString().trim();
            if ("false".equalsIgnoreCase(s.trim())) {
                value = false;
            } else {
                value = true;
            }
        } catch (Exception e) {
            value = defaultValue;
        }

        return value;
    }

    public static boolean toBoolean(String value, boolean defaultValue) {
        if (value == null || TextUtils.isEmpty(value)) {
            return defaultValue;
        }
        try {
            return Boolean.valueOf(value);
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }


    public static boolean toBoolean(int value, boolean defaultValue) {
        if (value < 0 || value > 1) return defaultValue;
        try {
            return value == 1;
        } catch (NumberFormatException e) {
            return defaultValue;
        }
    }

///////////////////////////////////////////////////////////////////////////
// other
///////////////////////////////////////////////////////////////////////////


    public static <T> T to(Object o, T defaultValue) {
        if (o == null) {
            return defaultValue;
        }
        T value = (T) o;
        return value;
    }

}